local CommonOHOH = _G.CommonOHOH;
local M = CommonOHOH.class.new(script, CommonOHOH.files.BaseObject());
M.IsClient = game:GetService("RunService"):IsClient();
local ConnectClass=_G.CommonOHOH.load.Connect();

--获取UGC任务ID
function M.GetTaskUGCId(ugcId,index)
    return "ugc_"..ugcId.."_"..index
end
--获取UGCId和任务索引
function M.GetUidAndIndex(taskId)
   local arg= string.split(taskId,"_")
   return tonumber(arg[2]),tonumber(arg[3])
end

function M.new(...)
	return M(...);
end;

function M.ctor(self,player,finish,tId)--构造函数

    self.UpdateEvent=ConnectClass.new() --任务进度更新（公开）
    self.CompleteEvent=ConnectClass.new() --任务进度完成（公开）

    assert(player,"player==nil")
    assert(tId,"tId==nil")
    self.Player=player
    self.TaskId=tId
    self.Finish=finish
    self.ConList={}
	M.super.ctor(self);
    if M.IsClient then
        self:ClientInit()
    else
        self:ServerInit()
    end

end;

--获取任务UIF（公开）
function M.GetTaskId(self)
    return self.TaskId
end
-- 获取任务进度数据（公开）
function M.GetProgress(self)
    return self.Now,self.Finish
end;

--是否完成（公开）
function M.IsComplete(self)
    if self.Now>=self.Finish then
        return true
    end
    return false
end

function M.ClientInit(self)--客户端初始化
    self.DataBase=self.Player:GetComponent(_G.ClientOHOH.load.Client_PlayerDataComponent());
    local now=self.DataBase:GetData("task")[self.TaskId]
    if now then
        self.Now=now
    else
        self.Now=0
    end
end

function M.ServerInit(self)--服务器初始化
    self.DataBase=self.Player:GetComponent(_G.ServerOHOH.load.Server_PlayerDataComponent())
    local now=self.DataBase:GetData("task").__real[self.TaskId]
    if now then
        self.Now=now
    else
        self.Now=0
    end
end

function M.AddConnect(self,con)
    table.insert(self.ConList,con)
end

-- 更新任务进度
function M.UpdateProgress(self,count)

    self.Now=self.Now+count
    self.UpdateEvent:Action(self)
    self:SaveTaskData()

    if self:IsComplete() then
        self:TaskDone()
    end
end

--任务完成
function M.TaskDone(self)
    self.CompleteEvent:Action()
    self:dtor()
end



function M.SaveTaskData(self)--保存任务数据
    self.DataBase:GetData("task")[self.TaskId]= self.Now
    if not M.IsClient then
        self.DataBase:Execut(function()
        end);
    end
end

function M.RemoveConnect(self)
    for  k,v in pairs(self.ConList) do
        v:Disconnect()
    end
    self.ConList={}
end
function M.dtor(self)--析构函数

    self.UpdateEvent:dtor()
    self.CompleteEvent:dtor()

    self:RemoveConnect()
    M.super.dtor(self);
end;

return M